package com.baidu.www1;
class Animal{
    public String name;
    public int age;
    public String color;

    public Animal(String name, int age, String color) {
        this.name = name;
        this.age = age;
        this.color = color;

    }//先执行父类的构造方法在执行子类的
    static {
        System.out.println("Animal::static");
    }
    {
        System.out.println("Animal::{}");
    }

    public void eat(){
        System.out.println(this.name+" is eating");
    }
}
//当子类继承父类之后，在实例化子类对象的时候要先帮助父类进行构造（初始化父类成员）
//初始化父类成员只有一种方法:调用构造方法
class Dod extends Animal{
    //子类/派生类extends父类/基类/超类
    public Dod (){
        super("dahuang",10,"黄色");
        //必须在第一行
    }

    static {
        System.out.println("Dod::static");
    }
    {
        System.out.println("Dod::{}");
    }
    public void bark(){
        System.out.println(this.name+"汪汪汪");
    }

}

class Cat extends Animal{
    public Cat(){
        super("小花",11,"白色");
        //刚刚父类没有任何一种构造方法，则默认会有一个不带参数的构造方法，且子类会调用，只是看不到
        // 但是当父类构造带三个参数的构造方法时，子类必须调用那个构造方法
    }
    public Cat(String name,int age,String color){
        super(name,age,color);

    }
    static {
        System.out.println("Cat::static");
    }
    {
        System.out.println("Cat::{}");
    }
    public void bark(){
        System.out.println(this.name+"汪汪汪");
    }
    public void miaomiao(){
        System.out.println(this.name+"喵喵喵");
    }

}
public class Text {
    public static void main(String[] args) {
        Dod dog=new Dod();
        dog.eat();
        dog.bark();

        Cat cat=new Cat("小花",8,"白色");
        cat.eat();
        cat.miaomiao();
    }
}//父类和子类的静态先执行
//父类的实例，父类的构造方法
//子类的实例，子类的构造方法
//类的权限只有public和默认访问权限


